
module ethernet_mac_top#(
    parameter                       SOURCE_MAC = 48'h11_22_33_44_55_66      ,
    parameter                       CRC_ON     = 1                          
)(
    input                           i_clk                                   ,
    input                           i_rst                                   ,
    input   [47: 0]                 i_set_source_mac                        ,
    input                           i_set_source_mac_valid                  ,
    input   [47: 0]                 i_arp_info_mac0                         ,
    input   [31: 0]                 i_arp_info_ip0                          ,
    input   [47: 0]                 i_arp_info_mac1                         ,
    input   [31: 0]                 i_arp_info_ip1                          ,
    output                          m_axis_tvalid                           ,
    output  [7 : 0]                 m_axis_tdata                            ,
    output                          m_axis_tlast                            ,
    output  [32: 0]                 m_axis_tuser                            ,
    input                           s_axis_tvalid                           ,
    input   [7 : 0]                 s_axis_tdata                            ,
    output                          s_axis_tready                           ,
    input                           s_axis_tlast                            ,
    input   [64: 0]                 s_axis_tuser                            ,
    input   [7 :0]                  i_gmii_rxdata                           ,
    input                           i_gmii_rxvalid                          ,
    output  [7 :0]                  o_gmii_txdata                           ,
    output                          o_gmii_txvalid
);

    mac_rx #(
        .SOURCE_MAC                 ( SOURCE_MAC                            ),
        .CRC_ON                     ( CRC_ON                                )
    )mac_rx_inst(
        .i_clk                      ( i_clk                                 ),
        .i_rst                      ( i_rst                                 ),
        .i_set_source_mac           ( i_set_source_mac                      ),
        .i_set_source_mac_valid     ( i_set_source_mac_valid                ),
        .m_axis_tvalid              ( m_axis_tvalid                         ),
        .m_axis_tdata               ( m_axis_tdata                          ),
        .m_axis_tlast               ( m_axis_tlast                          ),
        .m_axis_tuser               ( m_axis_tuser                          ),
        .i_gmii_rxdata              ( i_gmii_rxdata                         ),
        .i_gmii_rxvalid             ( i_gmii_rxvalid                        )
    );

    mac_tx#(
        .SOURCE_MAC                 ( SOURCE_MAC                            )    
    )
    mac_tx_inst
    (
        .i_clk                      ( i_clk                                 ),
        .i_rst                      ( i_rst                                 ),
        .i_set_source_mac           ( i_set_source_mac                      ),
        .i_set_source_mac_valid     ( i_set_source_mac_valid                ),
        .i_arp_info_mac0            ( i_arp_info_mac0                       ),
        .i_arp_info_ip0             ( i_arp_info_ip0                        ),
        .i_arp_info_mac1            ( i_arp_info_mac1                       ),
        .i_arp_info_ip1             ( i_arp_info_ip1                        ),
        .s_axis_tvalid              ( s_axis_tvalid                         ),
        .s_axis_tdata               ( s_axis_tdata                          ),
        .s_axis_tready              ( s_axis_tready                         ),
        .s_axis_tlast               ( s_axis_tlast                          ),
        .s_axis_tuser               ( s_axis_tuser                          ),
        .o_gmii_txdata              ( o_gmii_txdata                         ),
        .o_gmii_txvalid             ( o_gmii_txvalid                        )
    );

endmodule
